iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0
自我挑戰組

react.js 的學習筆記 (沒在用硬要學系列 第 17

day 17 自訂Hooks 打造自己的Hook

  • 分享至 

  • xImage
  •  

先寫一個input的小功能

import React, { useState }  from 'react'
import './app4.scss';


export default function App3() {

  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");

  return (
    <div>
      <input name="email" className="input" value={email}  onChange={e => setEmail(e.target.value)} />
      <input name="password" type="password" className="input" value={password}  onChange={e => setPassword(e.target.value)} />
      <p>{email}</p>
      <p>{password}</p>
    </div>
  );
}

帳號密碼一起列出來
https://ithelp.ithome.com.tw/upload/images/20200917/201102929RyuufoQKY.png

自訂Hooks

import React, {useState} from 'react'
import './app4.scss';


const useForm = (inval) => {
  const [values, setValues] = useState(inval);
  return[values,(e)=>{
      setValues({
          ...values,
          [e.target.name]:e.target.value
      })
  }]
}
export default function App3() {
  const [val, setVal] = useForm({email:'',password:''});
  return (
    <div>
      <input name="email"  className="input" value={val.email}  onChange={setVal} />
      <input name="password" type="password" className="input" value={val.password}  onChange={setVal} />
      <p>{val.email}</p>
      <p>{val.password}</p>
    </div>
  );
}

這邊自訂一個hooks叫useForm

你也可以把useForm拉出去,新創一個檔案叫
XXX.js

import { useState }  from 'react'

export const useForm = (inval) => {
    const [values, setValues] = useState(inval);
    return[values,(e)=>{
        setValues({
            ...values,
            [e.target.name]:e.target.value
        })
    }]
}

app.js

import React, {useState} from 'react'
import { useForm }  from './XXX'
import './app4.scss';


export default function App3() {

  const [val, setVal] = useForm({email:'',password:''});


  return (
    <div>
      <input name="email"  className="input" value={val.email}  onChange={setVal} />
      <input name="password" type="password" className="input" value={val.password}  onChange={setVal} />
      <p>{val.email}</p>
      <p>{val.password}</p>
    </div>
  );
}

這樣這個自訂的Hooks就可以被其他元件使用了


上一篇
day 16 寫一個簡單的 to do List
下一篇
day 18 知道useState之後還要知道useReducer
系列文
react.js 的學習筆記 (沒在用硬要學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言